package org.pps.gl.server.datastore;

import java.util.ArrayList;
import java.util.List;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.FetchOptions;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.FilterOperator;

public class Specialite {

	public static Entity createSpecialite(Entity ecole, String emailUser,
			String nom) {

		if (ecole != null) {
			Entity specialite;
			specialite = new Entity("Specialite", ecole.getKey());
			specialite.setProperty("email_user", emailUser);
			specialite.setProperty("nom", nom);
			Util.persistEntity(specialite);
			return specialite;
		} else
			return null;
	}

	/**
	 * Méthode qui permet la mise à jour d'une propriété du de l'ecole.
	 * 
	 * @param ecole
	 * @param property
	 * @param value
	 */
	public static void updateSpecialite(Entity specialite, String property,
			String value) {

		// Mise à jour de la propriété
		specialite.setProperty(property, value);
		Util.persistEntity(specialite);
	}

	/**
	 * Récupère l'ecole correspondant à une étude.
	 * 
	 * @param etude
	 *            : étude correspondant
	 * @return: Ecole entity.
	 */
	/*
	 * public static Entity getSpecialite (Entity ecole) { Key ancestorKey =
	 * ecole.getKey(); return Util.findEntity(ancestorKey); }
	 */

	public static Entity getSpecialite(Entity ecole) {
		if (Util.listChildren("Specialite", ecole.getKey()).iterator().hasNext())
			return Util.listChildren("Specialite", ecole.getKey()).iterator().next();
		else
			return null;
	}

	/**
	 * Récupère les écoles correspondantes a l'email d'un user.
	 * 
	 * @param emailUser
	 *            : email d'un user
	 * @return profil entity
	 */
	public static Entity getSpecialite(String emailUser) {
		Query query = new Query("Specialite");
		query.addFilter("email_user", FilterOperator.EQUAL, emailUser);
		List<Entity> results = Util.getDatastoreServiceInstance()
				.prepare(query).asList(FetchOptions.Builder.withDefaults());
		if (!results.isEmpty()) {
			return (Entity) results.remove(0);
		}
		return null;
	}

	public static List<String> getAllSpecialite() {

		List<String> ret = new ArrayList<String>();
		Iterable<Entity> results = Util.listEntities("Specialite", null, null);

		for (Entity e : results) {
			if (!ret.contains(e.getProperty("nom").toString()))
				ret.add(e.getProperty("nom").toString());
		}

		return ret;
	}

	/**
	 * Efface la spécialite d'une école d'un utilisateur
	 * 
	 * @param
	 */
	public static String deleteSpecialite(Entity specialite) {
		// Entity entity = getProfil(userEmail);
		if (specialite != null) {
			Util.deleteEntity(specialite.getKey());
			return ("Specialite deleted successfully.");
		} else
			return ("Specialite not found");
	}

	public static String getNomSpecialite(Entity specialite) {
		return (String) specialite.getProperty("nom");
	}
}
